package cn.wolfcode.trip.base.service.impl;

import cn.wolfcode.trip.base.domain.Cmf_Integral;
import cn.wolfcode.trip.base.domain.Cmf_Product;
import cn.wolfcode.trip.base.domain.Cmf_User_Product;
import cn.wolfcode.trip.base.mapper.Cmf_IntegralMapper;
import cn.wolfcode.trip.base.mapper.Cmf_User_ProductMapper;
import cn.wolfcode.trip.base.query.ProductObject;
import cn.wolfcode.trip.base.service.ICmf_ProductService;
import cn.wolfcode.trip.base.service.ICmf_User_ProductService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class Cmf_User_ProductServiceImpl implements ICmf_User_ProductService {
    @Autowired
    private Cmf_User_ProductMapper user_productMapper;
    @Autowired
    private ICmf_ProductService productService;
    @Autowired
    private Cmf_IntegralMapper integralMapper;


    @Override
    public void save(Cmf_User_Product cmf_user_product) {
        if (cmf_user_product.getState() == 1) {
            //定义一个购买时间
            cmf_user_product.setBuyTime(new Date());
        }
        //模拟开始的时间
        cmf_user_product.setStartTime(new Date());
        //模拟结束的时间
        cmf_user_product.setEndTime(new Date());
        //购买的价格,可以先判断一下用户是否是会员，如果是则选择会员价，如果不是则选择原价(会员后续处理),先按照原价
        Cmf_Product cmf_product = productService.selectByProductId(cmf_user_product.getProductId());
        //查询出用户的积分
        Cmf_Integral cmf_integral = integralMapper.selectByUserIds(cmf_user_product.getUserId());
        cmf_user_product.setBuyPrice(cmf_product.getPrice());
        //查询出该用户商品表中是否已经存在了
        List<Cmf_User_Product> cmf_user_products = user_productMapper.selectByUserIdAndProduct(cmf_user_product.getUserId(), cmf_user_product.getProductId());
        //保证从数据库中查到的值非空
        if (cmf_user_products.size() != 0) {
            for (Cmf_User_Product c : cmf_user_products) {
                //判断一下用户是否支付了，如果支付了则改变状态
                if (c.getState() == 0) {
                    if (cmf_user_product.getBuyTime() != null) {
                        cmf_user_product.setNum(c.getNum());
                        if (cmf_integral.getIntegral() < cmf_product.getPrice() * cmf_user_product.getNum()) {
                            throw new RuntimeException("积分不足");
                        }
                        //如果积分足够则减去积分，并将商品添加到用户商品表里面
                        cmf_integral.setIntegral(cmf_integral.getIntegral() - cmf_product.getPrice() * c.getNum());
                        c.setState(1);
                        c.setBuyPrice(cmf_product.getPrice() * cmf_user_product.getNum());
                        user_productMapper.updateByNum(c);
                        integralMapper.updateByPrimaryKey(cmf_integral);
                        //加入购物车处理
                    } else {
                        c.setNum(c.getNum() + 1);
                        c.setBuyPrice(cmf_product.getPrice() * cmf_user_product.getNum());
                        user_productMapper.updateByNum(c);
                    }
                }else if(cmf_user_products.size()==1){
                    user_productMapper.insert(cmf_user_product);
                }
            }
            //如果查询出来的数据为空，则插入一条数据。
        } else {
            user_productMapper.insert(cmf_user_product);
        }
    }


    @Override
    public PageInfo selectByUserId(ProductObject qo) {
        //按照购买时间排序
        qo.setOrderBy("buyTime desc");
        PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize(), qo.getOrderBy());
        List<Cmf_User_Product> list = user_productMapper.selectByUserId(qo.getUserId());
        return new PageInfo(list);
    }

    /**
     * 用来处理退款事情
     *
     * @param cmf_user_product
     */
    @Override
    public void refund(Cmf_User_Product cmf_user_product) {
        //退款第一步,先获取到要退款的金额
        List<Cmf_User_Product> cmf_user_products = user_productMapper.selectByUserIdAndProduct(cmf_user_product.getUserId(), cmf_user_product.getProductId());
        for (Cmf_User_Product c:cmf_user_products) {
            if(c.getState()==1){
                //查询出用户的积分
                Cmf_Integral cmf_integral = integralMapper.selectByUserIds(cmf_user_product.getUserId());
                cmf_integral.setIntegral(cmf_integral.getIntegral() + c.getBuyPrice());
                //增加用户的积分
                integralMapper.updateByPrimaryKey(cmf_integral);
                //删除购物车里面商品的信息
                user_productMapper.deleteByUserIdAndProduct(c);
            }
        }
    }
}
